<?php
/**
 * Шаблон постраничного вывода
 * 
 * Помогает в определении общего числа элементов и количества страниц, на которых они должны выводиться
 * 
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
class Service_Pager {
  /**
   * Enter description here...
   *
   * @var integer $itemCount - общее количество элементов
   * @var integer $itemsPerPage - количество элементов на странице
   */
  private $itemCount = -1;  
  private $itemsPerPage = 20;  

  /**
   * функция возвращает количество элементов на странице
   *
   * @return integer
   */
  public function getItemsPerPage() {
    return $this->itemsPerPage;
  }


  /**
   * функция возвращает количество элементов
   *
   * @return integer
   */
  public function getNumberOfItems() {
        return $this->itemCount;
    
  }

  /**
   * Функция возвращает требуемое количество страниц
   *
   * @return integer
   */
  public function getNumberOfPages() {
    return(ceil($this->itemCount / $this->itemsPerPage));
  }  
  
  /**
   * функция  изменения размера страницы
   *
   * @param integer $itemsPerPage - количество элементов на странице
   * @return bool
   */
  public function setPageSize($itemsPerPage) {
    $this->itemsPerPage = $itemsPerPage;
    return true;
  }

  /**
   * функция сохраняет количество элементов
   *
   * @param integer $itemsCount - количество элементов
   * @return bool
   */
  protected function setItemCount($itemsCount) {
    $this->itemCount = $itemsCount;
    return true;
  }

  /**
   * Функция формирует LIMIT для SQL запросов исходя из номера страницы и количества элементов для вывода
   *
   * @param integer $pageNum - номер выводимой страницы (0, если выводить все элементы)
   * @return string - строка лимита
   */
  public function makeLimits($pageNum = 0){
        if ($pageNum > 0) {//Если задан номер страницы
        $startEl = ($pageNum - 1) * $this->itemsPerPage;
      return ' LIMIT ' . $startEl . ', ' . $this->itemsPerPage;
    }
    else {//Если номер страницы не задан, то выводим все элементы, т.е. LIMIT не требуется
      return '';
    }
  }
  
  /**
   * Функция формирует LIMIT для SQL запросов исходя из номера страницы и количества элементов для вывода
   *
   * @param integer $pageNum - номер выводимой страницы (0, если выводить все элементы)
   * @param integer $itemsPerPage - количество элементов на странице
   * @return string - строка лимита
   */
  public static function makeLimitsManually($pageNum = 0, $itemsPerPage = 20){
    if ($pageNum > 0) {//Если задан номер страницы
      $startEl = ($pageNum - 1) * $itemsPerPage;
      return ' LIMIT ' . $startEl . ', ' . $itemsPerPage;
    }
    else {//Если номер страницы не задан, то выводим все элементы, т.е. LIMIT не требуется
      return '';
    }
  } 
  
}
?>